<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
 <title>ecmanaut</title>
 <base href="http://ecmanaut.googlecode.com/svn/trunk/sites/ecmanaut.blogspot.com/">
 <!--
 <base href="/Users/jhs/cvs/ecmanaut/sites/ecmanaut.blogspot.com/">
 -->
 <meta name="title" content="ecmanaut">
 <meta name="description" content="On client side programming and service orchestration, Greasemonkey user scripting, user interfaces and web development.">
 <meta name="keywords" content="ecmanaut,ecmascript,javascript,greasemonkey,e4x,Exhibit,ajax,ui,gui,open source,web,development">
 <meta name="geo.position" content="58.415294;15.602978">
 <meta name="geo.region" content="SE-E">
 <meta name="geo.placename" content="Linköping">
 <meta name="DC.title" content="ecmanaut">
 <meta name="ICBM" content="58.415294, 15.60297">
 <link rel="openid.server" href="http://www.myopenid.com/server">
 <link rel="openid.delegate" href="http://ecmanaut.myopenid.com/">
 <meta name="subject" content="ecmanaut">
 <meta name="author" content="Johan Sundström, ecmanaut.blogspot.com, oyasumi&#43;blogger&#64;gmail&#46;com">
 <meta name="language" content="English">
 <meta name="abstract" content="ecmanaut - teaching the web new tricks">
 <meta name="copyright" content="Copyright © Johan Sundström">
 <meta name="revisit-after" content="3 days">
 <meta name="distribution" content="global">
 <meta name="rating" content="general">
 <meta name="robots" content="All">
 <meta name="DC.Title" content="ecmanaut">
 <meta name="DC.Description" content="On client side programming and service orchestration, Greasemonkey user scripting, user interfaces and web development.">
 <meta name="DC.Subject" content="ecmanaut,ecmascript,javascript,greasemonkey,e4x,Exhibit,ajax,ui,gui,open source,web,development">
 <meta name="DC.Creator" content="Johan Sundström">
 <meta name="verify-v1" content="J1STtl/Fc3sj6hn831ATf2LO3A8/dvbwwykkQ/mJwW8=">
 <meta http-equiv="content-type" content="text/html;charset=UTF-8">
 <link rel="shortcut icon" href="http://hem.bredband.net/ecmanaut/gfx/sites/ecmanaut.png">
 <link rel="stylesheet" rev="stylesheet" href="ecmanaut.css" media="screen">

 <link rel="stylesheet" rev="stylesheet" href="widgets/babel.css" media="screen">
 <script src="widgets/babel.js"></script>

 <script>
function load( url ) {
  if( url.indexOf(":") == -1 )
    url = "file://" + url;
  var script = '<script type="text/javascript" src="'+ url +'"></scr'+'ipt>\n';
  document.write( script );
}

function css( url ) {
 var link = '<link rel="stylesheet" href="'+ url +'" type="text/css" />\n';
 document.write( link );
}

if( location.protocol != "file:" ) {
  load( 'http://simile.mit.edu/repository/exhibit/branches/2.0/src/webapp/api/exhibit-api.js?bundle=false' );
} else {
  load( '/Users/jhs/cvs/exhibit/src/ajax/api/simile-ajax-api.js?bundle=false' );
  load( '/Users/jhs/cvs/exhibit/src/webapp/api/exhibit-api.js?bundle=false' );
}



function getGData( feed, index/*, index, ... */ ) {
  function also( s ) { return true; }
  function test( p, o, and_also ) { return function( s ) {
      if( s[p] === o && and_also( s ) )
	return s;
      return null;
    };
  }
  function make_tester( specs ) {
    var tester = also;
    while( specs.length >= 2 )
      tester = test( specs.shift(), specs.shift(), tester );
    return tester;
  }
  var args = [].slice.call( arguments, [1] ), property, value, tester, car, cdr;

  if( feed instanceof Array ) {
    switch( typeof index ) {
      case "number":
      case "object":
	if( !(index instanceof Array) )
	  break; // fall through to the next if (the feed Array is an Object)
	tester = make_tester( index );
	feed = [].slice.call( feed );
	while( feed.length )
	  if( null !== tester( value = feed.shift() ) ) {
	    //console.log( "found ", value );
	    return getGData.apply( this, [value].concat( args.slice( 1 ) ) );
	  }
	return null;

      default:
	//console.log( "index of type ", typeof index );
	if( !feed.length ) return [];
        var car = feed[0], cdr = [].slice.call( feed, [1] );
        car = getGData.apply( this, [car].concat( args ) );
        cdr = getGData.apply( this, [cdr].concat( args ) );
        return [car].concat( cdr );
    }
  }

  if( feed instanceof Object ) {
    switch( typeof index ) {
      case "undefined":
	return "$t" in feed ? feed.$t : feed;

      case "object":
	//console.log( "indexing through ", index );
	if( index instanceof Array ) {
	  //console.log( "which is an array." );
	  tester = make_tester( index );
	  for( property in feed ) {
	    //console.log( property, ": ", feed[property] );
	    if( !feed.hasOwnProperty( property ) )
	      continue; // protect against poisoned Object.prototype
	    else if( null !== tester( feed ) ) {
	      //console.log( "property ", property, " is wanted ", value );
	      return getGData.apply( this, [feed].concat( args.slice( 1 ) ) );
	    }
	  }
	  return null;
	}

	var result = {};
	for( property in index ) {
/*
	  console.log( "property ", property, index.hasOwnProperty(property),
		       ": ", index[property] );
*/
	  if( !index.hasOwnProperty( property ) )
	    continue; // protect against poisoned Object.prototype
	  args[0] = index[property];
	  result[property] = getGData.apply( this, [feed].concat( args ) );
	}
	return result;

      default:
	feed = feed[args.shift()];
	return getGData.apply( this, [feed].concat( args ) );
    }
  }

  return feed;
}

// getGData( feed, "feed", ["start","openSearch$startIndex", "total","openSearch$totalResults"] )

function bloggerConv( json ) {
  function time( t, name, entry ) {
    // Parse a time like 2007-04-25T18:55:00.000+02:00
    var date = t.slice( 0, 10 );
    var time = t.slice( 11, 16 );
    var prefix = { c:"post", m:"update" }[name.charAt( 0 )];
    var called = { c:"posted", m:"updated" }[name.charAt( 0 )];
    entry[prefix+"-date"] = date;
    entry[prefix+"-time"] = time;
    return entry[called] = [date, time].join(" ");
  }
  window.json = json;
  var entries = getGData( json, "feed", "entry" ), entry;

  var authors = getGData( entries, "author", "name" );
  var posts = [], post;
  for( var i = 0; entry = entries[i]; i++ ) {
    var post = getGData( entry, { label:"title", html:"content",
				  ctime:"published", mtime:"updated" } );
    post.script = post.html.indexOf( "\u003Cscript" ) != -1; // may break
    if( post.script )
      post.html = post.html.replace(/\u003Cscript/g,"\u0026lt;script");
/*
*/
    post.author = getGData( entry, "author", "name" ); // array(string)
    var links = getGData( entry, "link" ); // array(object)
    var link = getGData( links, ["rel","related"], "href" );
    if( link ) post.link = link;
    post.url = getGData( links, ["rel","alternate", "type","text/html"] );
    post.id = getGData( links, ["rel","self", "type","application/atom+xml"],
			"href" ).match( /\d+$/ )[0];
    time( post.ctime, "ctime", post );
    time( post.mtime, "mtime", post );
    post.type = "post";
    posts.push( post );
  }
  window.console && console.log( posts );
  return { items:posts, types:{ post:{ pluralLabel:"posts" } },
           properties:{ script:{ valueType:"boolean" } } };
}
</script>

 <link rel="exhibit/data" type="application/jsonp" ex:converter="bloggerConv"
      href="http://ecmanaut.blogspot.com/feeds/posts/default?alt=json-in-script&amp;max-results=30&amp;start-index=1">
 <!--script src="http://static.simile.mit.edu/exhibit/api-2.0/exhibit-api.js?bundle=false"></script-->

 <style type="text/css">
#author {
  text-align:right;
}

#email {
  border:1px solid #839ABF;
  float:right;
}

#subscribe { float:right; }

ul#translate { margin-bottom:1em; }

.column {
  width:218px;
  background:#D5DEED url(gfx/content.jpg) repeat-x scroll 0% -18px;
}

.map {
 border:1px solid #839ABF;
 text-align:center;
 background:#FFF;
 padding:1em 0;
 margin:1em 0;
}

.links {
 margin:1em 0;
}

.exhibit-collectionView-header > div { position:absolute; margin-top:-4px; }
.exhibit-collectionView-header .exhibit-collectionView-header-sortControls {
   position:static; margin-top:auto;
}
div.exhibit-collectionView-header-sortControls { text-align:right; }
.exhibit-collectionView-header-groupControl { display:none; }
ol.exhibit-tileView-body { margin:20px 0 0 0; padding:0; }
ol.exhibit-tileView-body li { list-style-type:none; }
.exhibit-tileView-itemIndex { vertical-align:top; color:#006; display:none; }
.exhibit-collectionView-header-sortControls { width:41em; }

div.exhibit-facet-body { border:1px solid #839ABF; }
#script-facet .exhibit-facet-body { height:4em; }
#date-facet .exhibit-facet-body { height:auto; max-height:10em; }

.exhibit-collectionView-body { position:relative; }

.entry .tags { display:none; }

.calendar caption div.month { float:left; width:8em; }
.calendar caption div.year { float:right; width:5.5em; }
.calendar caption a,.calendar caption a:visited { margin:0 0.2em; }
.calendar caption { height:20px; }
 </style>
 <!--[if IE 7]>
 <link rel="stylesheet" rev="stylesheet" href="ie7.css" media="screen" />
 <![endif]-->
 <meta name="mssmarttagspreventparsing" content="true">

 <link rel="alternate" type="application/atom+xml" title="ecmanaut"
  href="http://feeds.feedburner.com/ecmanaut">
 <link rel="EditURI" type="application/rsd+xml" title="RSD"
  href="http://www.blogger.com/rsd.g?blogID=15626356">
 <link rel="service.post" type="application/atom+xml" title="ecmanaut"
  href="https://www.blogger.com/atom/15626356">
 <!--link rel="pingback" href=""-->
</head>

<body>

 <div class="main">

  <div class="header">
    <div class="name">
     <h3><a href="http://ecmanaut.blogspot.com/"><span class="nah">e</span><span>cmanaut</span></a></h3>
     <p>Interactive Solutions</p>
    </div>
    <div class="nav">
     <ul>
      <li><a href="http://ecmanaut.blogspot.com/"><span>Home</span></a></li>
      <li><a href="#about"><span>About</span></a></li>
      <li><a href="http://exhibit.ecmanaut.googlepages.com/"><span>Exhibits</span></a></li>
      <li><a href="mailto:oyasumi&#43;blogger&#64;gmail&#46;com"><span>Contact</span></a></li>
     </ul>
    </div>
  </div><!-- header -->

  <div class="content-head-left"><div class="content-head-right"><div class="content-head-center"></div></div></div>

  <div class="content-body-left">
    <div class="content-body-right">
     <div class="content-body-center">
      <div class="content">
<!--<br />
             updated <span ex:content=".mtime"></span>-->
       <div class="entries"
	    ex:role="view"
	    ex:possibleOrders=".label, .posted, .updated"
	    ex:orders=".posted"
	    ex:directions="descending"
       >
        <div class="entry" ex:role="lens">
         <h5>
          <span title="posted" ex:content=".posted"></span><br />
          <span title="updated" ex:content=".updated"></span>
         </h5>
         <h3 ex:content=".label"></h3>
         <div ex:content=".html"></div>
        </div>
       </div><!-- entries -->

        <div class="column">
         <div class="calendar">
          <table cellspacing="0">
            <caption>
             <div class="month">
              <a href="#" title="Previous month">«</a>
              May
              <a href="#" title="Next month">»</a>
     	     </div>
             <div class="year">
              <a href="#" title="Previous year">«</a>
              2007
              <a href="#" title="Next year">»</a>
             </div>
            </caption>
            <thead>
             <tr>
              <th>Sun</th>
              <th>Mon</th>
              <th>Tue</th>
              <th>Wed</th>
              <th>Thu</th>
              <th>Fri</th>
              <th>Sat</th>
             </tr>
            </thead>
            <tbody>
             <tr>
              <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>1</td><td>2</td><td>3</td><td>4</td>
             </tr>
             <tr>
              <td><a href="#"><span>5</span></a></td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td>
             </tr>
             <tr>
              <td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td>
             </tr>
             <tr>
              <td>19</td><td>20</td><td>21</td><td><a href="#"><span>22</span></a></td><td>23</td><td>24</td><td>25</td>
             </tr>
             <tr>
              <td>26</td><td>27</td><td>28</td><td>29</td><td>30</td><td>&nbsp;</td><td>&nbsp;</td>
             </tr>
             <tr>
              <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
             </tr>
            </tbody>
          </table>
         </div><!-- calendar -->

         <ul id="translate"></ul>

<div class="map" style="">

<a href="http://clustrmaps.com/counter/maps.php?url=http://ecmanaut.blogspot.com/"><img width="160" height="106" border="1" onerror="this.onError=null; this.src='http://www.meetomatic.com/images/clustrmaps-back-soon.jpg'; this.parentNode.href='http://clustrmaps.com/'" alt="Locations of visitors to this page" src="http://clustrmaps.com/counter/index2.php?url=http://ecmanaut.blogspot.com/" id="clustrmap"/></a>

</div>

<div class="links">

<div>
<h5>Subscribe</h5>

<form action="http://www.feedblitz.com/feedblitz.exe?BurnUser" method="post"><p>
<input type="text" id="email" size="15" maxlength="255" name="email" />
<input type="hidden" value="ecmanaut" name="uri" />
<a class="rounded" title="Click here to view the RSS feed of this blog" href="http://feeds.feedburner.com/ecmanaut"><span>ATOM</span></a>
<a class="rounded" title="Click here to view the RDF feed of this blog" href="#"><span>RSS</span></a>
<a class="rounded" title="Click here to view the RDF feed of this blog" href="#"><span>RDF</span></a>
</p>

<p id="subscribe"><input type="submit" value="Subscribe"/></p>
<p id="poweredByFeedBlitz">Mail subscription by <a href="http://www.feedblitz.com">FeedBlitz</a></p></form>

</div>

<div ex:role="exhibit-facet" id="script-facet"
     ex:expression=".script" ex:selection="false"
     ex:facetLabel="Post contains &amp;lt;script&amp;gt; tags"></div>

<div ex:role="exhibit-facet" id="date-facet"
     ex:expression=".post-date"
     ex:facetLabel="Publish date"></div>

<!--
<img width="82" height="104" border="0" src="http://photos1.blogger.com/blogger/5057/1080/400/pensive.jpg" alt="The author" id="author" />
-->

</div>
        </div><!-- column -->
      </div><!-- content -->
     </div>
    </div>
  </div><!-- content-body-left -->

  <div class="content-foot-left"><div class="content-foot-right"><div class="content-foot-center"></div></div></div>

  <div class="footer">
   <p class="copyright">Blue wizard... ...<i>is it!</i></p>
   <p class="info">Invalid <a href="http://validator.w3.org/check/referer" title="See what W3.org thinks about the HTML of this page">HTML</a> &amp; <a href="http://jigsaw.w3.org/css-validator/check/referer" title="See what W3.org thinks about the CSS of this page">CSS</a></p>
  </div><!-- footer-->
 </div><!-- main -->

</body></html>
